﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DiscoveryLogic.Common.Utilities;

namespace DiscoveryLogic.Analytics.DataObjects.Graphs
{
    public class Graph
    {
        #region events
        /// <summary>
        /// 
        /// </summary>
        /// <param name="fieldStatsByNetwork"></param>
        public delegate void OnFieldStatsUpdated(Dictionary<string, Dictionary<string, FieldStat>> fieldStatsByNetwork);
        /// <summary>
        /// 
        /// </summary>
        /// <param name="g"></param>
        public delegate void OnGraphMeasureUpdated(Graph g);
        /// <summary>
        /// 
        /// </summary>
        public event OnFieldStatsUpdated FieldStatsUpdated;

        public event OnGraphMeasureUpdated GraphMeasureUpdated;

        #endregion

        #region props
        private Dictionary<Guid, Vertice> _Vertices;
        /// <summary>
        /// 
        /// </summary>
        public Dictionary<Guid, Vertice> Vertices
        {
            get { return _Vertices; }
            set { _Vertices = value; }
        }

        private Dictionary<Guid, Edge> _Edges;
        /// <summary>
        /// 
        /// </summary>
        public Dictionary<Guid, Edge> Edges
        {
            get { return _Edges; }
            set { _Edges = value; }
        }
        #endregion

        #region render
        private IGraphRender _GraphRender;
        /// <summary></summary>
        public IGraphRender GraphRender
        {
            get
            {
                return this._GraphRender;
            }
            set
            {
                this._GraphRender = value;
            }
        }
        #endregion

        #region measure
        private IGraphMeasure _GraphMeasure;
        /// <summary></summary>
        public IGraphMeasure GraphMeasure
        {
            get
            {
                return this._GraphMeasure;
            }
            set
            {
                this._GraphMeasure = value;
            }
        }
        #endregion
    }
}
